package veterinaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import veterinaria.excepcion.DAOExcepcion;
import veterinaria.modelo.Publicidad;
import veterinaria.util.ConexionBD;

public class PublicidadDAO extends BaseDAO {
	
	/*
	public Collection<Publicidad> buscarPorNombre(String descripcion)	throws DAOExcepcion {
		String query = "select idPublicidad, dsPublicidad, dsComplejidad from Publicidad where dsPublicidad like ?";
		Collection<Publicidad> lista = new ArrayList<Publicidad>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try
		{
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, "%" + descripcion + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Publicidad vo = new Publicidad();
				vo.setIdPublicidad(rs.getInt("idPublicidad"));
				vo.setDsPublicidad(rs.getString("dsPublicidad"));
				vo.setDsComplejidad(rs.getString("dsComplejidad"));
				lista.add(vo);
			}
		}
		catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		finally
		{
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//System.out.println(lista.size());
		return lista;
		}
		*/
	
		public void insertar(Publicidad vo) throws DAOExcepcion {
		System.out.println("PublicidadDAO: insertar(Publicidad vo)");
		String query = "insert into publicidad(titulo,contenido,fechaInicio,fechaFin,tarifa,visitas,ubicacion) values (?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		//ResultSet rs = null;
		try	{
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);			
			stmt.setString(1, vo.getTitulo());
			stmt.setString(2,vo.getContenido());
			stmt.setString(3,vo.getFechaInicio());
			stmt.setString(4,vo.getFechaFin());
			stmt.setDouble(5,vo.getTarifa());
			stmt.setInt(6,vo.getVisitas());
			stmt.setString(7,vo.getUbicacion());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}		
			// Obtener el ultimo id
			//int id = 0;
			//query = "select last_insert_id()";
			//stmt = con.prepareStatement(query);
			//rs = stmt.executeQuery();
			//if (rs.next()) {
			//	id = rs.getInt(1);
			//}
			//vo.setIdPublicidad(id);
		}
		catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		finally
		{
			//this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//return vo;
		}

		/*
		public Publicidad obtener(int idPublicidad) throws DAOExcepcion {
		Publicidad vo = new Publicidad();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select idPublicidad, Cita_idCita, dsPublicidad, dsComplejidad from Publicidad where idPublicidad=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPublicidad);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo.setIdPublicidad(rs.getInt(1));				
				vo.setCita_idCita(rs.getInt(2));
				vo.setDsPublicidad(rs.getString(3));
				vo.setDsComplejidad(rs.getString(4));
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
		}

		public void eliminar(int idPublicidad) throws DAOExcepcion {
		String query = "delete from Publicidad WHERE idPublicidad=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPublicidad);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		}

		public Publicidad actualizar(Publicidad vo) throws DAOExcepcion {
		String query = "update Publicidad set Cita_idCita=?, dsPublicidad=?, dsComplejidad=? where idPublicidad=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, vo.getCita_idCita());			
			stmt.setString(2, vo.getDsPublicidad());
			stmt.setString(3, vo.getDsComplejidad());
			stmt.setInt(4, vo.getIdPublicidad());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
		}
*/
		public Collection<Publicidad> listar() throws DAOExcepcion {
		Collection<Publicidad> c = new ArrayList<Publicidad>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select idPublicidad,titulo,contenido,fechaInicio,fechaFin,tarifa,visitas,ubicacion from publicidad order by idPublicidad";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Publicidad vo = new Publicidad();
				vo.setIdPublicidad(rs.getInt("idPublicidad"));
				vo.setTitulo(rs.getString("titulo"));				
				vo.setContenido(rs.getString("contenido"));
				vo.setFechaInicio(rs.getString("fechaInicio"));
				vo.setFechaFin(rs.getString("fechaFin"));
				vo.setTarifa(rs.getDouble("tarifa"));
				vo.setVisitas(rs.getInt("visitas"));
				vo.setUbicacion(rs.getString("ubicacion"));
				c.add(vo);
			}

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
		}


}
